#include <iostream>

// 创建自定义选择
// 创建自定义选择可以引导编译器做出你希望的选择

// 声明了一个 非模板函数和一个模板函数
template <typename T>
T lesser(T a, T b)
{
    return a < b ? a : b;
}

int lesser(int a, int b)
{
    return a < b ? a : b;
}

int main()
{
    using namespace std;
    int m = 20;
    int n = -30;
    double x = 15.5;
    double y = 25.9;
    cout << lesser(m, n) << endl;      // 将会使用 非模板函数  int lesser(int a, int b)
    cout << lesser(x, y) << endl;      // 将会使用 模板函数,因为函数列表中的非模板函数不匹配 template <typename T>double lesser(double a, double b)
    cout << lesser<>(m, n) << endl;    // 将会使用 模板函数,因为显式指定了编译器应该选择函数模板  template <typename T>int lesser(int a, int b)
    cout << lesser<int>(x, y) << endl; // 将会使用 函数模板并且进行强制类型转换,因为显式指定了编译器使用函数模板,而且指定了函数应该使用的类型为int
    // 所以这个函数使用的函数原型是 template <typename T>int lesser(int a, int b)

        return 0;
}